package com.gqr.singleton;

/**
 * Copyright (C), 2020-2024,gqr
 * FileName:Singleton3
 * author:guqingrong
 * Date:2024-05-02 21:48
 * Description:懒汉式(线程安全)[但不推荐]
 * History:
 * <author>    <time>    <version>    <desc>
 * 作者姓名     修改时间     版本号        描述
 */
public class Singleton4 {
    private static Singleton4 instance;

    private Singleton4(){

    }

    /**
     * 在线程竞争情况下 两个线程同时到达这里 instance 没有实例过 还是null
     * 两个线程都执行判断语句 都认为是instance是null
     * 这样会多次创建实例 不再满足单例的要求了
     * 此时加了synchronized锁 同一时间只会有一个线程进来 保证了单例
     * 但是缺点很明显 效率太低了
     * 比如这是一个工具类实例  会在很多个线程中无法并行 同时处理
     */
    public synchronized static Singleton4 getInstance(){

        if(instance ==null){
            instance = new Singleton4();
        }
        return instance;
    }
}
